
// 引入vue
import Vue from "vue";
// 引入VueRouter
import VueRouter from "vue-router";
//使用VueRouter
Vue.use(VueRouter);

/* 引入routes (配置组件路由地址) */
import routes from "./routes"

//处理push跳转出错
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
    return originalPush.call(this, location).catch(err => err)
}

const router = new VueRouter({
    mode: "history",//跳转地址不带#号  可能会造成样式丢失，将样式路径改成绝对路径
    routes,
    /* 配置路由跳转定位 */
    scrollBehavior(to, from, savedPosition) {
        return { y: 0 }
    }
})

/* 引入vuex */
import store from "../store"

/* 
 配置全局导航前置守卫  router.beforeEach()  在路由开始跳转之前触发该事件
    next()       //无条件放行
    next(false)  //无条件拦截
    next("/")    //跳转指定路径

先从vuex中拿到token和userInfo 再判断
如果(有token){
        如果(跳转的页面是login页){
            强制转跳到home页
        }否则{
            如果(有用户信息userInfo){
                无条件放行所有的页面
            }否则{
                try{ 
                    获取用户信息
                        获取成功 无条件放行所有页面
                }catch{
                    获取失败 (可能是token失效)
                        清空token 跳转到登录页
                }
            }
        }
}否则{
    如果(跳转的是订单页面、支付页面或者是个人中心){
        提示需要登录 跳转到登录页面
    }否则{
        无条件放行
    }
} 
*/
router.beforeEach(async (to, from, next) => {
    /* to(跳转路由)  from(当前路由)  next控制是否放行*/
    /* 先在vuex中拿到token 和 userInfo */
    let token = store.state.user.token
    let userInfo = store.state.user.userInfo
    if (token) {
        if (to.path.startsWith("/login")) {
            alert("你在干什么？你已经登陆过了")
            next("/")
        } else {
            if (userInfo.name) {
                // console.log("有信息随便逛");
                next()
            } else {
                try {
                    /* 获取用户信息 */
                    await store.dispatch("reqUserInfo")
                    // console.log("没有信息需要获取");
                    next()
                } catch (error) {
                    /* 清空token */
                    store.dispatch("reqClearToken")
                    next("/login")
                }
            }
        }
    } else {
        if (to.path.startsWith("/trade") || to.path.startsWith("/pay") || to.path.startsWith("/myorder")) {
            alert("您还没有登录")
            next("/login")
        } else {
            next()
        }
    }

})

export default router